﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entities;
using LogicaNegocio;

namespace Presentacion.Informes
{
    public partial class ProductosMasVendidos : System.Web.UI.Page
    {
        private static bool esFiltrada = false;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.Page.Title = "Informe - Productos mas vendidos por Categoria";
                cargarCategorias();
                cargarMarcas();
            }
            this.Page.Title = "Informe - Productos mas vendidos por Categoria";
        }
        private void cargarCategorias()
        {
            try
            {
                GestorCategorias gcategorias = new GestorCategorias();
                ddlCategorias.DataSource = gcategorias.obtenerTodasCategorias();
                ddlCategorias.DataTextField = "Nombre";
                ddlCategorias.DataValueField = "IdCategoria";
                ddlCategorias.DataBind();
                ddlCategorias.Items.Insert(0, new ListItem("<Seleccione un Item>", "0"));
                if (ddlCategorias.Items.Count == 0)
                {
                    ddlCategorias.Items.Clear();
                    ddlCategorias.DataSource = null;                    
                }
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
                //Console.Write("ERROR: " + ex.Message);
            }
        }
        private void cargarMarcas()
        {
            try
            {
                GestorMarcas gmarcas = new GestorMarcas();
                ddlMarcas.DataSource = gmarcas.obtenerTodasMarcas();
                ddlMarcas.DataTextField = "Nombre";
                ddlMarcas.DataValueField = "IdMarca";
                ddlMarcas.DataBind();
                ddlMarcas.Items.Insert(0, new ListItem("<Seleccione un Item>", "0"));
                if (ddlMarcas.Items.Count == 0)
                {
                    ddlMarcas.Items.Clear();
                    ddlMarcas.DataSource = null;
                    //ddlCategorias.Items.Clear();
                }
            }
            catch (Exception ex)
            {
                //lblError.Text = "Hubo un problema al cargar los tipos de documentos";
                lblMensajeError.Text = ex.Message;
                //Console.Write("ERROR: " + ex.Message);
            }
        }

        protected void btnFiltrar_Click(object sender, EventArgs e)
        {
            cargarGrillaFiltrada();
        }
        private void cargarGrilla()
        {
            try
            {
                esFiltrada = false;
                GestorProductos gProductos = new GestorProductos();
                List<Producto> lstProductos = gProductos.ObtenerTodos();
                if (lstProductos != null)
                {
                    GestorMarcas gm = new GestorMarcas();
                    GestorCategorias gc = new GestorCategorias();
                    GestorUnidadesMedida gu = new GestorUnidadesMedida();
                    foreach (Producto item in lstProductos)
                    {
                        item.NombreCategoria = gc.BuscarPorId(item.IdCategoria).Nombre;
                        item.NombreMarca = gm.BuscarPorId(item.IdMarca).Nombre;
                        item.NombreUnidadMedida = gu.BuscarPorId(item.IdUnidadMedida).Nombre;
                    }
                    grdProductos.DataSource = lstProductos;
                    string[] claves = { "idProducto" };
                    grdProductos.DataKeyNames = claves;
                    grdProductos.DataBind();
                }
                else
                {
                    grdProductos.DataSource = null;
                    grdProductos.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
            }            
        }
        private void cargarGrillaFiltrada()
        {
            try
            {
                esFiltrada = true;
                int? idMarca = null;
                int? idCategoria = null;
                DateTime? fechaDesde = null;
                DateTime? fechaHasta = null;

                GestorProductos gProductos = new GestorProductos();
                //gTipoDocumento = new GestorTipoDocumentos();

                if (ddlMarcas.SelectedValue != null && ddlMarcas.SelectedIndex > 0)
                    idMarca = Convert.ToInt32(ddlMarcas.SelectedValue);
                if (ddlCategorias.SelectedValue != null && ddlCategorias.SelectedIndex > 0)
                    idCategoria = int.Parse(ddlCategorias.SelectedValue);
                if (calendarDesde.SelectedDate != DateTime.MinValue)
                    fechaDesde = calendarDesde.SelectedDate;
                if (calendarHasta.SelectedDate != DateTime.MinValue)
                    fechaHasta = calendarHasta.SelectedDate;

                List<Producto> lstProductos = gProductos.ObtenerTodosInforme(idMarca, idCategoria, fechaDesde, fechaHasta);
                if (lstProductos != null && lstProductos.Count > 0)
                {
                    GestorMarcas gm = new GestorMarcas();
                    GestorCategorias gc = new GestorCategorias();
                    GestorUnidadesMedida gu = new GestorUnidadesMedida();
                    foreach (Producto item in lstProductos)
                    {
                        item.NombreCategoria = gc.BuscarPorId(item.IdCategoria).Nombre;
                        item.NombreMarca = gm.BuscarPorId(item.IdMarca).Nombre;
                        item.NombreUnidadMedida = gu.BuscarPorId(item.IdUnidadMedida).Nombre;
                    }
                    grdProductos.DataSource = lstProductos;
                    string[] claves = { "idProducto" };
                    grdProductos.DataKeyNames = claves;
                    grdProductos.DataBind();
                }
                else
                {
                    grdProductos.DataSource = null;
                    grdProductos.DataBind();
                }

            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
            }
            //int? idMarca;
            //int? idCategoria = null;
            //DateTime? fechaDesde = null;
            //DateTime? fechaHasta = null;

            //GestorProductos gProductos = new GestorProductos();
            ////gTipoDocumento = new GestorTipoDocumentos();

            //if (ddlMarcas.SelectedValue != null)
            //    idMarca = Convert.ToInt32(ddlMarcas.SelectedValue);
            //if (ddlCategorias.SelectedValue != null)
            //   idCategoria = int.Parse(ddlCategorias.SelectedValue);
            //if (calendarDesde.SelectedDate != null)
            //    fechaDesde = calendarDesde.SelectedDate;
            //if (calendarHasta.SelectedDate != null)
            //    fechaHasta = calendarHasta.SelectedDate;
            ////if (ddlTipoDocumento.SelectedIndex >= 1)
            ////    tipoDoc = Convert.ToInt32(ddlTipoDocumento.SelectedValue.ToString());
           
            ////List<Producto> lstProductos = gProductos.ObtenerTodos();
            ////if (lstClientes != null)
            ////{
            ////    foreach (Cliente item in lstClientes)
            ////    {
            ////        item.TipoDocumento = gTipoDocumento.BuscarPorId(item.IdTipoDocumento).Nombre;
            ////    }
            ////    grdClientes.DataSource = lstClientes;
            ////    string[] claves = { "idCliente" };
            ////    grdClientes.DataKeyNames = claves;
            ////    grdClientes.DataBind();
            ////}
            ////else
            ////{
            ////    grdClientes.DataSource = null;
            ////    grdClientes.DataBind();
            ////}
        }
        protected void btnLimpiar_Click(object sender, EventArgs e)
        {
            ddlCategorias.SelectedIndex = 0;
            ddlMarcas.SelectedIndex = 0;
            calendarDesde.SelectedDate = new DateTime();
            calendarHasta.SelectedDate = new DateTime();
        }

        protected void grdProductos_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdProductos.PageIndex = e.NewPageIndex;
            if (esFiltrada)
                cargarGrillaFiltrada();
            else
                cargarGrilla();
        }
    }
}